home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / slip / sl.shar / sl / src / local / slattach.c < prev   
C/C++ Source or Header  |  1988-04-12  |  2KB  |  137 lines

  1. #ifndef lint
  2. static char sccsid[] = "@(#)slattach.c    4.1 (Berkeley) 2/17/86";
  3. #endif
  4. #include <stdio.h>
  5. #include <sys/param.h>
  6. #include <sgtty.h>
  7. #include <sys/socket.h>
  8. #include <netinet/in.h>
  9. #include <net/if.h>
  10. #include <netdb.h>
  11. #include <fcntl.h>
  12.  
  13. #ifndef lint
  14. static char rcsid[] = "$Header: slattach.c,v 1.1 84/10/04 12:57:12 rick Exp $";
  15. #endif
  16.  
  17. #define DEFAULT_BAUD    9600
  18. int    speed;
  19. int    slipdisc = SLIPDISC;
  20.  
  21. char    devname[32];
  22. char    hostname[MAXHOSTNAMELEN];
  23.  
  24. extern int errno;
  25.  
  26. main(argc, argv)
  27.     int argc;
  28.     char *argv[];
  29. {
  30.     register FILE *fp;
  31.     register int fd;
  32.     register char *dev = argv[1];
  33.     struct sgttyb sgtty;
  34.     int n;
  35.  
  36.     if (argc < 2 || argc > 3) {
  37.         fprintf(stderr, "usage: %s ttyname [baudrate]\n", argv[0]);
  38.         exit(1);
  39.     }
  40.     speed = argc == 3 ? findspeed(atoi(argv[2])) : findspeed(DEFAULT_BAUD);
  41.     if (speed == 0) {
  42.         fprintf(stderr, "unknown speed %s", argv[2]);
  43.         exit(1);
  44.     }
  45.     if (strncmp("/dev/", dev, 5)) {
  46.         sprintf(devname, "/dev/%s", dev);
  47.         dev = devname;
  48.     }
  49.     if ((fd = open(dev, O_RDWR | O_NDELAY)) < 0) {
  50.         perror(dev);
  51.         exit(1);
  52.     }
  53.     sgtty.sg_flags = RAW | ANYP;
  54.     sgtty.sg_ispeed = sgtty.sg_ospeed = speed;
  55.     if (ioctl(fd, TIOCSETP, &sgtty) < 0) {
  56.         perror("ioctl(TIOCSETP)");
  57.         exit(1);
  58.     }
  59.     if (ioctl(fd, TIOCSETD, &slipdisc) < 0) {
  60.         perror("ioctl(TIOCSETD)");
  61.         exit(1);
  62.     }
  63.  
  64.     if (fork() > 0)
  65.         exit(0);
  66.     for (;;)
  67.         sigpause(0);
  68. }
  69.  
  70. struct sg_spds {
  71.     int sp_val, sp_name;
  72. }       spds[] = {
  73. #ifdef B50
  74.     { 50, B50 },
  75. #endif
  76. #ifdef B75
  77.     { 75, B75 },
  78. #endif
  79. #ifdef B110
  80.     { 110, B110 },
  81. #endif
  82. #ifdef B150
  83.     { 150, B150 },
  84. #endif
  85. #ifdef B200
  86.     { 200, B200 },
  87. #endif
  88. #ifdef B300
  89.     { 300, B300 },
  90. #endif
  91. #ifdef B600
  92.     { 600, B600 },
  93. #endif
  94. #ifdef B1200
  95.     { 1200, B1200 },
  96. #endif
  97. #ifdef B1800
  98.     { 1800, B1800 },
  99. #endif
  100. #ifdef B2000
  101.     { 2000, B2000 },
  102. #endif
  103. #ifdef B2400
  104.     { 2400, B2400 },
  105. #endif
  106. #ifdef B3600
  107.     { 3600, B3600 },
  108. #endif
  109. #ifdef B4800
  110.     { 4800, B4800 },
  111. #endif
  112. #ifdef B7200
  113.     { 7200, B7200 },
  114. #endif
  115. #ifdef B9600
  116.     { 9600, B9600 },
  117. #endif
  118. #ifdef EXTA
  119.     { 19200, EXTA },
  120. #endif
  121. #ifdef EXTB
  122.     { 38400, EXTB },
  123. #endif
  124.     { 0, 0 }
  125. };
  126.  
  127. findspeed(speed)
  128.     register int speed;
  129. {
  130.     register struct sg_spds *sp;
  131.  
  132.     sp = spds;
  133.     while (sp->sp_val && sp->sp_val != speed)
  134.         sp++;
  135.     return (sp->sp_name);
  136. }
  137.